﻿/* PC INpact Toolkit for Chrome™

	PC INpact Toolkit for Chrome™ est une extension destinée au navigateur Chrome permettant d'accéder à de nombreuses fonctionnalités de PC INpact.
	Vous y retrouverez les actualités, brèves, calendriers du site, mais aussi les comptes Twitter de l'équipe ou des fonctionnalités de recherche.
	Des notifications peuvent aussi être affichées sur votre bureau, à chaque nouvelle publication sur le site (actualités, dossiers, tests).

	Main author : LEGRAND David
	Mail : david@pcinpact.com
	
	Google Code Project : http://pci.im/code-pci-chrome 
	Forum : http://pci.im/forum-pci-chrome
	
    This file is part of PC INpact Toolkit for Chrome™.

    PC INpact Toolkit for Chrome™ is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    PC INpact Toolkit for Chrome™ is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with PC INpact Toolkit for Chrome™.  If not, see <http://www.gnu.org/licenses/>. 

    You're not allowed to use PC INpact Toolkit for Chrome™ name or logo without permission 

	Loading GIF : http://www.ajaxload.info/

 */

 // La fonction qui effectue un fade in / out
function fade_toggle(elmt, zone)
{
	zone.style.paddingBottom = "15px";
	
	// On précise que tout est ok via un message (effet CSS3)
	elmt.style.opacity = 100;
	
	// On efface ce message peu après
	setTimeout(function() {
		elmt.style.opacity = 0;
		}, 3000);
	
	setTimeout(function() {
		zone.style.paddingBottom = "";
		}, 4000);	
}

// Fonction de remise à zéro des paramètres
function get_default()
{
	document.options.reset();
	save_all();
}

// La fonction qui fait une backup de tous les paramètres
function save_all()
{
	save_options('notif_delay');
	save_options('cache_delay');
	save_options('news_delay');
	save_options('breves_delay');
	save_options('articles_delay');
	save_options('forum_delay');
	save_options('notif_check');
	save_options('popup_check');
	save_options('actus_redir_check');
	
	// On enregistre qu'on a demandé une backup de toutes les données
	// Comme le formulaire va être reloadé, cela permettra d'indiquer que tout est ok au prochain chargement
	localStorage["all_saved"] = 1;
}

// La fonction qui désactive les champs lorsque la case des notifications est décochée
function disable_notif_fields(go)
{
	document.getElementById("notif_delay").disabled = go;
	document.getElementById("articles_delay").disabled = go;
}

// La fonction qui vide le Local Storage
function empty_ls()
{
	// On vide le LS
	window.localStorage.clear(); 
	
	// On recharge le background
	chrome.extension.getBackgroundPage().window.location.reload(); 
	
	// On récupère les données par défaut
	get_default();
}

// Fonction qui sauvegarde les données
function save_options(id_element) 
{
	// On récupère le champ status qui nous servira à afficher le images d'avertissement
	var status = document.getElementById("status");
	var nd = document.getElementById(id_element);
	
	// En fonction de la donnée à sauvegarder
	switch(id_element)
	{
		// Dans le cas des valeurs numériques
		case('cache_delay'):
		case('notif_delay'):
		case('breves_delay'):
		case('news_delay'):
		case('articles_delay'):
		case('forum_delay'):
			// On vérifie la valeur et si elle est OK, on l'enregistre
			if (nd.validity.valid) localStorage[id_element] = document.getElementById(id_element).value;
		
		case('notif_check'):
			// Si la case notif_check est cochée, on l'enregistre et on active quelques champs
			if(document.getElementById("notif_check").checked) 
			{
				localStorage["notif_ckeck"] = 1;
				disable_notif_fields(false);
			}
			// Si elle n'est pas cochée, on fait de même, mais on désactive aussi quelques champs
			else 
			{
				localStorage["notif_ckeck"] = 0;
				disable_notif_fields(true);
			}
			break;
			
		// On attribue 0 ou 1 à popup_check en fonction de son état
		case('popup_check'):
			if (document.getElementById("popup_check").checked == true) localStorage["popup_check"] = 1;
			else localStorage["popup_check"] = 0;
			break;
			
		// On attribue 0 ou 1 à popup_check en fonction de son état
		case('actus_redir_check'):
			if (document.getElementById("actus_redir_check").checked == true) localStorage["actus_redir_check"] = 1;
			else localStorage["actus_redir_check"] = 0;
			break;
	}

	// Si la valeur est valide, on affiche un message pour indiquer que la sauvegarde est ok
	if (nd.validity.valid) fade_toggle(document.getElementById('status') , document.getElementById('bouton'));	
}

// La fonction qui lit les variables à l'ouverture de la page
function restore_options() {
	
	document.getElementById("cache_delay").value = localStorage["cache_delay"];
	document.getElementById("notif_delay").value = localStorage["notif_delay"];
	document.getElementById("news_delay").value = localStorage["news_delay"];
	document.getElementById("breves_delay").value = localStorage["breves_delay"];
	document.getElementById("articles_delay").value = localStorage["articles_delay"];
	document.getElementById("forum_delay").value = localStorage["forum_delay"];

	// Si la valeur est "checked", on coche la case, sinon, on force le statut décoché
	if (localStorage["notif_ckeck"] == 1) document.getElementById("notif_check").checked = true;
	else document.getElementById("notif_check").checked = false;
	
	// Si la valeur est "checked", on coche la case, sinon, on force le statut décoché
	if (localStorage["popup_check"] == 1) document.getElementById("popup_check").checked = true;
	else document.getElementById("popup_check").checked = false;
	
	// Si la valeur est "checked", on coche la case, sinon, on force le statut décoché
	if (localStorage["actus_redir_check"] == 1) document.getElementById("actus_redir_check").checked = true;
	else document.getElementById("actus_redir_check").checked = false;
	
	// Si la case des notification n'est pas cochée, on désactive des champs
	if(!document.getElementById("notif_check").checked) 
	{
		disable_notif_fields(true);
	}
	
	// Si l'on recharge depuis une backup de toutes les infos, on affiche un message
	if (localStorage["all_saved"] == 1)
	{
		fade_toggle(document.getElementById('status') , document.getElementById('bouton'));	
		
		// On passe ensuite all_saved à 0
		localStorage["all_saved"] = 0;
	}
}
